package com.wanmait.schedule.controller;


import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
import com.wanmait.schedule.entity.CompanyUser;
import com.wanmait.schedule.entity.Reject;
import com.wanmait.schedule.entity.Task;
import com.wanmait.schedule.service.TaskService;
import com.wanmait.schedule.util.Result;
import org.springframework.web.bind.annotation.*;

import org.springframework.stereotype.Controller;

import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import java.util.ArrayList;
import java.util.List;

/**
 * <p>
 * 任务表 前端控制器
 * </p>
 *
 * @author wanmait
 * @since 2022-03-02
 */
@RestController
@RequestMapping("/task")
public class TaskController {
    @Resource
    TaskService taskService;
    //通过企业id和部门id查询所有的任务(未完成)
    @PostMapping("member/findAllContinued")
    public Result findAllContinued(@RequestBody Task task){
        return Result.success(taskService.findAllContinued(task));
    }
    //通过企业id和部门id查询所有的任务(已提交)
    @PostMapping("member/findAllSubmitted")
    public Result findAllSubmitted(@RequestBody Task task){
        return Result.success(taskService.findAllSubmitted(task));
    }
    //通过企业id和部门id查询所有的任务(已完成)
    @PostMapping("member/findAllDone")
    public Result findAllDone(@RequestBody Task task){
        return Result.success(taskService.findAllDone(task));
    }

    //通过企业用户id查询所有的任务(企业直接下发的任务)
    @GetMapping("member/listCompany/{id}")
    public Result listCompany(@PathVariable Integer id){

        return Result.success(taskService.findAllCompanyTask(id));
    }
    //通过企业用户id,显示企业用户的任务(未完成的项目)
    @GetMapping("member/list/{id}")
    public Result list(@PathVariable Integer id){
       return Result.success(taskService.findAllTask(id));
    }
    //通过企业用户id查询企业直接下发的任务(未完成的项目)
    @GetMapping("member/enterpriseTask/{id}")
    public Result enterpriseTask(@PathVariable Integer id){
        return Result.success(taskService.enterpriseTask(id));
    }

    //通过企业用户id查询出已审核通过的项目
    @GetMapping("member/completedFindAll/{id}")
    public Result completedFindAll(@PathVariable Integer id){
        return Result.success(taskService.completedFindAll(id));
    }
    //通过企业用户id查询出已审核的企业直接下发的项目
    @GetMapping("member/completedCompanyFindAll/{id}")
    public Result completedCompanyFindAll(@PathVariable Integer id){
        return Result.success(taskService.completedCompanyFindAll(id));
    }
    //通过企业用户id查询出已提交的项目
    @GetMapping("member/submittedFindAll/{id}")
    public Result submittedFindAll(@PathVariable Integer id){
        return Result.success(taskService.submittedFindAll(id));
    }
    //通过企业用户id查询出已提交的企业直接下发的项目
    @GetMapping("member/submittedCompanyFindAll/{id}")
    public Result submittedCompanyFindAll(@PathVariable Integer id){
        return Result.success(taskService.submittedCompanyFindAll(id));
    }
    //提交任务
    @PostMapping("member/updateSubmit")
    public Result updateSubmit(@RequestBody Task task){
        LambdaUpdateWrapper<Task> updateWrapper = new LambdaUpdateWrapper<>();
        updateWrapper.eq(Task::getId,task.getId());
        updateWrapper.set(Task::getSubmit,1);
        taskService.update(updateWrapper);
        return Result.success("提交任务成功");
    }
    //通过企业id和任务id查询项目(未完成的项目)
    @PostMapping("member/findTaskById")
    public Result findTaskById(@RequestBody Task task){
        System.out.println("========================");
        System.out.println(task.getCompanyUserId());
        System.out.println(task.getId());
        System.out.println("========================");
        return Result.success(taskService.findTaskById(task));
    }
    /*部长功能：A：
                    A-1:审核 组员上传的任务，必须是已经提交，未通过的任务 查找提交任务列表来进行审核
                    A-2： 根据审核来 通过 或者 驳回
                        A-2-1:通过：
                                  任务完成：1   同时添加部长已提交查看任务的时间   修改任务完成时间
                        A-2-2：驳回：
                               修改驳回表 任务提交变为0（未提交状态）；审核状态保持不变,部长查看时间跟新
                B:
                    B-1:单独给组内成员下达任务 项目字段为null
                C：
                    C-1:任务完成明细： 谁完成（超时完成，完成），谁未完成（延期中，搁置）
                D：
                    D-1:成员任务修改
                E:
                    E-1:组内成员离职，检查CompanyUser中这个部门中的离职人员：
                    E-2：如果还有任务在身：（1）强制执行结束，然后
                                          （2）转交给组内其他成员，重新分配任务（）
    * */
/*  A:
*  *审核任务:任务列表*/
//    查看提交没通过的
    @RequestMapping("/minister/taskList")
    public Result taskList(HttpServletRequest request){
        List<Task> taskList = new ArrayList<>();
        CompanyUser companyUser = new CompanyUser();
        companyUser = (CompanyUser)request.getAttribute("companyUser");
        Integer pubId = companyUser.getId();
        return  Result.success(taskService.taskList(pubId));
    }
/**审核任务  通过或者不通过驳回*/
    @PostMapping("/minister/taskCheck")
    public Result taskCheck(@RequestBody Reject reject, Integer taskId) {
        System.out.println("id"+taskId);
        System.out.println(reject);
        if(reject==null||reject.getId()==null){
//            审核通过
            taskService.taskPass(taskId);
        }else{
//            任务不通过
            taskService.taskNotPass(taskId,reject);
        }
        return Result.success("审核完成");
    }
    /** B:单独 给组内成员下达任务*/
    @PostMapping("/minister/assignTaskSingle")
    public  Result assignTaskSingle(@RequestBody Task task){
        taskService.addExtraTask(task);
        return Result.success("分配任务成功");
    }
    /*
    C:
        C-1:任务完成明细： 谁完成（超时完成，完成），谁未完成（延期中，搁置）

    */


    /*
   D： 成员任务修改:1先查看组内成员名单
                2点击组内成员查看此人的任务信息
                3点击某个任务，进行弹窗更改
                4保存新修改的任务，传到后端，保存修改
    */
/*    1:查看看组内成员名单 真实的用户名字
       @RequestMapping("/minister/getMembers")
    public Result getMembers(HttpServletRequest request)*/
//    2:点击组内成员 查看任务信息 具备 分页和模糊搜索的功能： 依据任务名称或者任务详情进行 模糊搜索
    @RequestMapping("/minister/taskListPage")
    public Result taskListPage(Integer companyUserId,Integer pageSize,Integer pageNum,String taskName,String taskDetail){
        return Result.success(taskService.memberTaskPageList(companyUserId,pageNum,pageSize,taskName,taskDetail));
    }
//    3：点击任务查看详情,如果是  未提交  的任务，可以进行修改（以提交的任务会进行颜色区分）
    @RequestMapping("/minister/taskDetail")
    public Result taskDetail(Integer taskId){
        return Result.success(taskService.taskDetail(taskId));
    }
//    4:保存修改
    @PostMapping("/minister/saveTask")
    public Result saveTask(@RequestBody Task task){
        taskService.saveTask(task);
        return Result.success("修改完成");
    }
    /*E:
            E-1:组内成员离职，检查CompanyUser中这个部门中的离职人员：
            查找任务未完成： 任务没提交 没审核    成员结束时间为null
             成员的状态是离职状态 companuUser 中的 flag = true
    * */
    @RequestMapping("/minister/resignMemberList")
    public Result resignMember(HttpServletRequest request){
//        CompanyUser companyUser = (CompanyUser) request.getAttribute("companyUser");
//        Integer companyId = companyUser.getCompanyId();
//        Integer departmentId = companyUser.getDepartmentId();
        return Result.success(taskService.findResignMember(1));
    }
    /*
             E-2:处理离职人员信息，强制中断离职人员未完成的任务(可能存在多个)；对这些未完成的任务进行 在分配
             传入任务 taskId
    * */
    @RequestMapping("/minister/handelTask")
    public Result handleTask(Integer taskId){
//        强制结束掉任务
        taskService.overTask(taskId);
        return Result.success("delete");
    }
    @RequestMapping("/minister/taskRedistribute")
//    任务在分配
    public Result redistribute(@RequestBody Task task){
        if(task.getProjectId()==null){
//            如果再分配的任务不隶属于项目
            taskService.addExtraTask(task);
        }else{
//            如果再分配的任务 是属于项目
            taskService.addTask(task);
        }
        return  Result.success("Redistribute");
    }





}
